/* Die Klasse Erfasst eine Telefonnummer
 * 
 * Datei:  Telefonnummer.java                Autor:    Martin Fischer
 * Datum:  13.11:2011                        Version:  1.0
 *
 *
 */

package kommunikation;

import java.io.Serializable;
import GUI.Dashboard;
import kommunikation.Parser.*;

public class Telefonnummer implements Serializable
{
  private static final long serialVersionUID = -902590316293728163L;
  private Nummerntyp typ;		/* gibt den Typ der Nummer an	*/
  private String telefonnummer;		/* beinhaltet die Telefonnummer	*/
  private Uebersetzung uebersetzung;

  /*
   * Konstruktor
   * Hier wird nur die Telefonnummer ohne Typangabe uebergeben
   */
  public Telefonnummer(String telefonnummer)
  {
    uebersetzung = new  Uebersetzung (Dashboard.
        verwendeteSprache ().toString ());
    if (!istGueltigeTelefonnummer (telefonnummer))
    {
//      System.out.println ("ungueltige Telefonnummer \n");
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FTP"));
    }
    else
    {
      this.telefonnummer = telefonnummer;
//      System.out.println ("Telefonnummer wurde uebernommen \n");
    }
  }
  
  
  /*
   * Konstruktor
   * Hier wird nur die Telefonnummer mit Typangabe uebergeben
   */
  public Telefonnummer(String telefonnummer, Nummerntyp typ)
  {
    uebersetzung = new  Uebersetzung (Dashboard.
        verwendeteSprache ().toString ());
    if (!istGueltigeTelefonnummer (telefonnummer))
    {
//      System.out.println ("ungueltige Telefonnummer \n");
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FTP"));
    }
    else
    {
      this.telefonnummer = telefonnummer;
      this.typ = typ;
//      System.out.println ("Telefonnummer wurde uebernommen \n");
    }   
  }


  /*
   * setze den Nummerntyp
   */
  public void setzeNummerntyp (Nummerntyp typ)
  {
    this.typ = typ;
  }


  /*
   * gib den Nummerntyp zurueck
   */
  public Nummerntyp gibNummerntyp ()
  {
    return typ;
  }


  /*
   * setze die Telefonnummer
   */
  public void setzeTelefonnummer (String telefonnummer)
  {
    if (!istGueltigeTelefonnummer (telefonnummer))
    {
//      System.out.println ("ungueltige Telefonnummer \n");
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FTP"));
    }
    else
    {
      this.telefonnummer = telefonnummer;
//      System.out.println ("Telefonnummer wurde uebernommen \n");
    }
  }


  /*
   * gib die Telefonnummer zurueck
   */
  public String gibTelefonnummer ()
  {
    return telefonnummer;
  }


  /*
   * Ueberpuefe ob die Telefonnummer einer gueltigen Schreibweise 
   * entspricht.
   */
  public boolean istGueltigeTelefonnummer (String zuPruefendeNummer)
  {
    TelefonParser tp = new TelefonParser ();
    tp.initialisieren (zuPruefendeNummer);
    /*
     * der Parder arbeitet solange bis sich die Maschine in eimem
     * Endzustand oder sich in einem Fehlerzustand befindet 
     */
    while (!tp.getAktuellenZusatnd ().istEndzustand ()
	&& !tp.istImFehlerzustand ())
    {
      /*
       * hier findet das Schrittweise ueberpruefen des Wortes statt
       */
      tp.arbeiten ();
    }
    /*
     * wenn dich der Parser im Fehlerzustand befindet wird ein 
     * false zurueckgegeben fuer nicht erkannt
     */
    if (tp.istImFehlerzustand ())
    {
      
      return false;
    }
    /*
     * das Wort wurde erkannt
     */
    return true;
  }
}
